FEXP Solver  1.0.0.0
FEXPElement.h
Go to the documentation of this file.
1 // © FEXP, FEXPEnterprise Solver, Ing. Vaclav Rek
3 // Definitions of applied finite elements
4 // Compiler must support C++ ver.14 and later
6 #ifndef _CFEXPELEMENT_H_
7 #define _CFEXPELEMENT_H_
8 #include "FEXPCommon.h"
9 #include "FEXPGeom.h"
10 #include "FEXPMaterial.h"
11 #include "FEXPSetting.h"
12 #include "FEXPDataContainer.h"
13 
16 #define FE_NODE_BASE_VECT_LENGTH 6
17 
23 
30 
33 {
34 public:
35  virtual ~ICFEXPGeomAction() { }
36 
37  // pure virtual member functions
38  virtual void CalculateTransformation() = 0;
39 protected:
40  // [no protected members] -----------------------------
41 private:
42  // [no private members ] -----------------------------
43 };
44 
51 
54 {
55 public:
58 protected:
59  void add_table_data(FEXPFEGeom::EFEXPFECoordinates dir, size_t type, size_t state, t_fexpcommon_ct time, t_fexpcommon_ct value);
60  bool get_table_data(FEXPFEGeom::EFEXPFECoordinates dir, size_t type, t_fexpcommon_ct time, size_t & state, t_fexpcommon_ct & value);
62  {
67  size_t _state_x;
68  size_t _state_y;
69  size_t _state_z;
73  void set_value(FEXPFEGeom::EFEXPFECoordinates dir, size_t state, t_fexpcommon_ct value);
74  void get_value(FEXPFEGeom::EFEXPFECoordinates dir, size_t & state, t_fexpcommon_ct & value);
75  };
76  std::map<size_t, Ptr<std::vector<Ptr<table_row_values>>>> _table;
77 private:
78  // [no private members ] -----------------------------
79 };
80 
87 
91 {
92 public:
94  enum EConstrStat { eOff, eOn };
95  ICFEXPElementNodeConstrain(size_t id) : _id(id) { }
97 
98  size_t GetConstrainId () { return _id; }
100  t_fexpcommon_ct time, t_fexpcommon_ct cstr) { add_table_data(dir, type, state, time, cstr); }
101 
102  // pure virtual functions
103  virtual void ApplyConstrain(EConstrType type, Ptr<CFEXPMatrix2D> & vect, t_fexpcommon_ct time) = 0;
104 protected:
105  // [no private members ] -----------------------------
106 private:
107  size_t _id;
108 };
109 
116 
120 {
121 public:
122  CFEXPElementNodeConstrain(size_t id);
124  // override pure virtual base functions
125  virtual size_t GetId () override { return GetConstrainId(); }
126  virtual size_t GetModelId () override { return FEXPCOMMON_DEFAULT_VALUE; }
127  virtual size_t GetType () override { return size_t(ESystemElementType::eConstrain); }
128  virtual size_t GetThreadId () override { return FEXPCOMMON_DEFAULT_VALUE; }
129  virtual size_t GetThreadNumber() override { return FEXPCOMMON_DEFAULT_VALUE; }
130  virtual void SetThreadId (size_t id) override { }
131  // override pure virtual base functions -- constrain base
132  virtual void ApplyConstrain(EConstrType type, Ptr<CFEXPMatrix2D> & vect, t_fexpcommon_ct time) override;
133 
134  // override pure virtual base functions for NETWORK serialization/deserialization
137 protected:
138  // [no protected members] -----------------------------
139 private:
140  // [no private members ] -----------------------------
141 };
142 
149 
153 {
154 public:
155  enum ELoadType { eF, eM, eAcc, eAccRot };
156  enum ELoadStat { eOff, eOn };
157  ICFEXPElementNodeLoad(size_t id) : _id(id) { }
159 
160  size_t GetLoadId () { return _id; }
162  t_fexpcommon_ct time, t_fexpcommon_ct cstr) { add_table_data(dir, type, state, time, cstr); }
163 
164  // pure virtual functions
165  virtual void ApplyLoad(ELoadType type, Ptr<CFEXPMatrix2D> & vect, t_fexpcommon_ct time) = 0;
166 protected:
167  // [no private members ] -----------------------------
168 private:
169  size_t _id;
170 };
171 
178 
182 {
183 public:
184  CFEXPElementNodeLoad(size_t id);
185  virtual ~CFEXPElementNodeLoad() { }
186  // override pure virtual base functions
187  virtual size_t GetId () override { return GetLoadId(); }
188  virtual size_t GetModelId () override { return FEXPCOMMON_DEFAULT_VALUE; }
189  virtual size_t GetType () override { return size_t(ESystemElementType::eLoad); }
190  virtual size_t GetThreadId () override { return FEXPCOMMON_DEFAULT_VALUE; }
191  virtual size_t GetThreadNumber() override { return FEXPCOMMON_DEFAULT_VALUE; }
192  virtual void SetThreadId (size_t id) override { }
193  // override pure virtual base functions -- load base
194  virtual void ApplyLoad(ELoadType type, Ptr<CFEXPMatrix2D> & vect, t_fexpcommon_ct time);
195 
196  // override pure virtual base functions for NETWORK serialization/deserialization
199 protected:
200  // [no protected members] -----------------------------
201 private:
202  // [no private members ] -----------------------------
203 };
204 
211 // primary template
212 template<typename TValue, typename Enable = void>
216 template<typename TValue>
218  // specialization for floating point types
219  <TValue, typename std::enable_if<std::is_floating_point<TValue>::value>::type>
220 {
221 public:
223 
224  // pure virtual member functions
225  // initialization constrains
226  virtual void InitConstrain(Ptr<ICFEXPElementNodeConstrain> & constrain_v,
227  Ptr<ICFEXPElementNodeConstrain> & constrain_a) = 0;
228  // initialization loads
229  virtual void InitLoad (Ptr<ICFEXPElementNodeLoad> & load) = 0;
230 protected:
231  // [no protected members] -----------------------------
232 private:
233  // [no private members ] -----------------------------
234 };
235 
242 class ICFEXPElementBase;
246  : public ICFEXPModelDataIntf, public ICFEXPElementNodeInitAction<t_fexpcommon_ct>,
247  public CFEXPFECoordinates<t_fexpcommon_ct>
248 {
249 public:
250  ICFEXPElementNodeBase(size_t id, size_t model_id, t_fexpcommon_ct x, t_fexpcommon_ct y, t_fexpcommon_ct z);
253 
254  // override model element base virtual functions
255  virtual size_t GetId () override { return GetNodeId(); }
256  virtual size_t GetModelId () override { return _model_id; }
257  virtual size_t GetType () override { return size_t(ESystemElementType::eNode); }
258  virtual size_t GetThreadId() override { return _thread_id; }
259  virtual void SetThreadId(size_t id) override { _thread_id = id; }
262 
263  // reset internal and contact forces
264  virtual void SetForcesToDefault() = 0;
265 
266  // virtual member functions
267  virtual void SetMass(t_fexpcommon_ct mass) { _node_mass = mass; }
268  virtual t_fexpcommon_ct GetMass() { return _node_mass; }
269  virtual Ptr<CFEXPMatrix2D> GetInrt() { return _inrt_mtrx; }
270  // pure virtual member functions
271  virtual t_fexpcommon_ct GetOriginalCoordinate(size_t idx) = 0;
272  // pure virtual member function -- forces from element
273  virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t idx) = 0;
274  // pure virtual member function -- reaction force from contact
275  virtual t_fexpcommon_ct GetPentratingContactForce(size_t idx) = 0;
276  virtual void SetPentratingContactForce(size_t idx, t_fexpcommon_ct force) = 0;
277  // pure virtual member function -- explicit calculation of a new displacements
278  virtual void CalcNewPosition(t_fexpcommon_ct dt, t_fexpcommon_ct dt_old) = 0;
279  // node result
281  // node displacement
283  // time functions
284  size_t GetTimeStepCounter() { return _t_counter; }
286  bool GetIsSimulationEnd() { return _t_current > _t_end; }
288 protected:
289  size_t _thread_id;
290  size_t _model_id;
291  // data for time management
292  size_t _t_counter;
296 private:
297  std::map<size_t, std::weak_ptr<ICFEXPElementBase>> _elements;
298  t_fexpcommon_ct _node_mass;
299  Ptr<CFEXPMatrix2D> _inrt_mtrx;
300 };
301 
308 // primary template
309 template<typename TValue, typename Enable = void>
313 template<typename TValue>
315  // specialization for floating point types
316  <TValue, typename std::enable_if<std::is_floating_point<TValue>::value>::type>
317 {
318 public:
320 
321  // reset internal and contact forces
322  virtual void SetForcesToDefault() = 0;
323 
324  // pure virtual member functions
325  // forces
326  virtual void CalcIntForce() = 0;
327  virtual void CalcConForce(std::vector<Ptr<ICFEXPElementNodeBase>> & found_nodes) = 0;
328 
329  // strain and stress
330  virtual void CalcStress(t_fexpcommon_ct dt) = 0;
331 protected:
332  // [no protected members] -----------------------------
333 private:
334  // [no private members ] -----------------------------
335 };
336 
344 // primary template
345 template<typename TValue, typename Enable = void>
349 template<typename TValue>
351  // specialization for floating point types
352  <TValue, typename std::enable_if<std::is_floating_point<TValue>::value>::type>
353 {
354 public:
356 
357  // pure virtual member functions
358  // initialization
359  virtual void Init(size_t id, size_t model_id, std::vector<Ptr<ICFEXPElementNodeBase>> & nodes, Ptr<ICFEXPMaterialBase> material,
360  Ptr<CFEXPBaseSetting> setting) = 0;
361  virtual void Init(size_t id, size_t model_id, std::vector<Ptr<ICFEXPElementNodeBase>> & nodes, Ptr<ICFEXPMaterialBase> material,
362  Ptr<CFEXPBaseSetting> setting, t_fexpcommon_ct thickness) = 0;
363 protected:
364  // [no protected members] -----------------------------
365 private:
366  // [no private members ] -----------------------------
367 };
368 
375 
378  : public ICFEXPModelDataIntf, public ICFEXPElementInitAction<t_fexpcommon_ct>,
379  public ICFEXPElementCalcAction<t_fexpcommon_ct>,
380  public ICFEXPGeomAction
381 {
382 public:
384  virtual ~ICFEXPElementBase() { }
385 
386  // override model element base virtual functions
387  virtual size_t GetId () override { return GetElementId(); }
388  virtual size_t GetModelId () override { return _fe_model_id; }
389  virtual size_t GetType () override { return size_t(ESystemElementType::eElement); }
390  virtual size_t GetThreadId() override { return _thread_id; }
391  virtual void SetThreadId(size_t id) override { _thread_id = id; }
392 
394 
395  size_t GetElementId() const { return _fe_id; }
396  size_t GetNodeCount() const { return _fe_nd_count; }
397  std::vector<std::weak_ptr<ICFEXPElementNodeBase>> & GetNodes() { return _node_coord; }
398 
399  // it gives values for element bounding box
401 
402  // forces
403  virtual void SetForce(EFEXPElementForce force, size_t node_id, size_t idx, t_fexpcommon_ct value) = 0;
404  virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t node_id, size_t idx) = 0;
405  // time service
406  virtual size_t GetTimeStepCounter() = 0;
407  virtual t_fexpcommon_ct GetCriticalDt () = 0;
408  // element result
410 protected:
411  size_t _fe_model_id;
412  size_t _fe_id;
413  size_t _fe_nd_count;
418  // finite element nodes
419  std::vector<std::weak_ptr<ICFEXPElementNodeBase>> _node_coord;
420 
421  template<typename TFeNode>
422  static typename std::enable_if<std::is_base_of<ICFEXPElementNodeBase, TFeNode>::value, Ptr<TFeNode>>::type
424 private:
425  size_t _thread_id;
427 };
428 
429 // member functions
431 //--------------------------------------------------------------------------------------
432 template<typename TFeNode>
433 typename std::enable_if<std::is_base_of<ICFEXPElementNodeBase, TFeNode>::value, Ptr<TFeNode>>::type
435 //--------------------------------------------------------------------------------------
436 {
437  return FEXPCOMMON_STACAST(ICFEXPElementNodeBase, TFeNode, base);
438 }
439 
446 
449  : public ICFEXPElementNodeBase
450 {
451 public:
452  CFEXPElementNodeGeneral(size_t id, size_t model_id, t_fexpcommon_ct x, t_fexpcommon_ct y, t_fexpcommon_ct z,
453  Ptr<CFEXPBaseSetting> setting);
455 
456  virtual size_t GetThreadNumber() override { return _setting->GetThreadNumber(); }
457 
458  // reset internal and contact forces
459  virtual void SetForcesToDefault() override;
460 
461  // override init constrain function
462  virtual void InitConstrain(Ptr<ICFEXPElementNodeConstrain> & constrain_v,
463  Ptr<ICFEXPElementNodeConstrain> & constrain_a) override;
464  // override init load function
465  virtual void InitLoad(Ptr<ICFEXPElementNodeLoad> & load) override;
466  // override base virtual functions
467  virtual t_fexpcommon_ct GetOriginalCoordinate(size_t idx) override;
468  // internal forces
469  virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t idx) override;
470  // contact forces
471  virtual t_fexpcommon_ct GetPentratingContactForce(size_t idx) override;
472  virtual void SetPentratingContactForce(size_t idx, t_fexpcommon_ct force) override;
473  // new displacement calculation
474  virtual void CalcNewPosition(t_fexpcommon_ct dt, t_fexpcommon_ct dt_old) override;
475  // node result
477  // node displacement
479 
480  // override pure virtual base functions for NETWORK serialization/deserialization
481  virtual Ptr<t_SerializedData> NetSerialize () override;
482  virtual void NetDeserialize(Ptr<t_SerializedData> data) override;
483 
484  // additional node informations
485  // velocities
486  Ptr<CFEXPMatrix2D> & GetVeloc() { return _velocity; }
487  // accelerations
488  Ptr<CFEXPMatrix2D> & GetAccel() { return _acclerat; }
489 protected:
490  // application of constrains
493  // application of loads
496 private:
497  Ptr<CFEXPBaseSetting> _setting;
498  // current displacements
499  Ptr<CFEXPMatrix2D> _displace;
500  // current velocities values
501  Ptr<CFEXPMatrix2D> _velocity;
502  // current accelerations values
503  Ptr<CFEXPMatrix2D> _acclerat;
504  // initial position vector
505  Ptr<CFEXPMatrix2D> _position_orig;
506  // current position vector
507  Ptr<CFEXPMatrix2D> _position;
508  // constrains
509  Ptr<ICFEXPElementNodeConstrain> _constrain_v;
510  Ptr<ICFEXPElementNodeConstrain> _constrain_a;
511  // loads
513  // node penetrating force
514  Ptr<CFEXPMatrix2D> _penetrating_contact_force;
515  // integration vectors
516  enum EExplicitIntegrVect { eCurrent, eOld };
517  std::map<EExplicitIntegrVect, Ptr<CFEXPMatrix2D>> _u;
518  std::map<EExplicitIntegrVect, Ptr<CFEXPMatrix2D>> _F_int;
519  std::map<EExplicitIntegrVect, Ptr<CFEXPMatrix2D>> _F_ext;
520  std::map<EExplicitIntegrVect, Ptr<CFEXPMatrix2D>> _F_cnt;
521  // current energies
522  t_fexpcommon_ct _En_int;
523  t_fexpcommon_ct _En_ext;
524  t_fexpcommon_ct _En_cnt;
525  // result map id
526  std::map<std::string, std::function<std::string()>> _result_map_gttr;
527 };
528 
535 
538  : public ICFEXPElementBase
539 {
540 public:
543 
544  virtual size_t GetThreadNumber() override { return _setting->GetThreadNumber(); }
545 
546  // override init actions
547  virtual void Init(size_t id, size_t model_id, std::vector<Ptr<ICFEXPElementNodeBase>> & nodes, Ptr<ICFEXPMaterialBase> material, Ptr<CFEXPBaseSetting> setting) override;
548  virtual void Init(size_t id, size_t model_id, std::vector<Ptr<ICFEXPElementNodeBase>> & nodes, Ptr<ICFEXPMaterialBase> material, Ptr<CFEXPBaseSetting> setting, t_fexpcommon_ct thickness) override;
549 
550  virtual void SetForcesToDefault() override;
551 
552  // override force. calc. actions
553  virtual void CalcIntForce() override;
554  virtual void CalcConForce(std::vector<Ptr<ICFEXPElementNodeBase>> & found_nodes) override;
555  // override base virtual functions -- internal forces, moments
556  virtual void SetForce(EFEXPElementForce force, size_t node_id, size_t idx, t_fexpcommon_ct value) override;
557  virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t node_id, size_t idx) override;
558  // override base virtual functions -- time counter, stabil time step
559  virtual size_t GetTimeStepCounter() override;
560  virtual t_fexpcommon_ct GetCriticalDt () override;
561 
562  // override strain and stress calc actions
563  virtual void CalcStress(t_fexpcommon_ct dt) override;
564 
565  // override geometry update function
566  virtual void CalculateTransformation() override;
567  // override element result getter
569 
570  // override pure virtual base functions for NETWORK serialization/deserialization
571  virtual Ptr<t_SerializedData> NetSerialize () override;
572  virtual void NetDeserialize(Ptr<t_SerializedData> data) override;
573 
576 protected:
577  // [no protected members] -----------------------------
578 private:
579  // base setting
580  Ptr<CFEXPBaseSetting> _setting;
581 
582  t_fexpcommon_ct _contact_critical_dt;
583  t_fexpcommon_ct _thickness_init;
584  t_fexpcommon_ct _thickness_old;
585  t_fexpcommon_ct _thickness;
586  t_fexpcommon_ct _fe_area;
587  size_t _layer_number;
588  void init_shell_layers(t_fexpcommon_ct thick);
589  // shell integration h-layers
590  std::vector<t_fexpcommon_ct> _fe_int_weight;
591  std::vector<t_fexpcommon_ct> _fe_int_layers;
592  // nodes of finite element
593  enum EShellNodeIndex { eNode1, eNode2, eNode3, eNodeCount };
594  // base vectors of local coordinate system (plane definition)
596  // used material -- layers
597  std::vector<Ptr<ICFEXPMaterialBase>> _material;
598  bool is_material_valid(size_t layer);
599 
600  // data preparation for stress-strain calculation
601  void prepare_data_for_stress_strain_calc();
602  Ptr<CFEXPMatrix2D> _p_vect;
603  Ptr<CFEXPMatrix2D> _p_vect_0;
604  Ptr<CFEXPMatrix2D> _v_vect;
605  Ptr<CFEXPMatrix2D> _a_vect;
606  Ptr<CFEXPMatrix2D> _A_mtrx;
607  // geometrical B matrixes
608  void calc_B_strain_matrixes();
609  Ptr<CFEXPMatrix2D> _B_m_mtrx; // membrane
610  Ptr<CFEXPMatrix2D> _B_b_mtrx; // bending
611  Ptr<CFEXPMatrix2D> _B_s_mtrx; // shear
612  // extract rigid body rotation
613  void rigid_body_rot(Ptr<CFEXPMatrix2D> vect_p, Ptr<CFEXPMatrix2D> vect_v, Ptr<CFEXPMatrix2D> vect_a);
614  // calculate rate of strain
615  void calc_strain_stress(t_fexpcommon_ct dt);
616  // strains
617  t_fexpcommon_ct _d_m_x; t_fexpcommon_ct _kpp_x;
618  t_fexpcommon_ct _d_m_y; t_fexpcommon_ct _kpp_y;
619  t_fexpcommon_ct _d_m_xy; t_fexpcommon_ct _kpp_xy;
620  std::vector<Ptr<CFEXPMatrix2D>> _strn;
621  std::vector<Ptr<CFEXPMatrix2D>> _d_strn;
622  std::vector<Ptr<CFEXPMatrix2D>> _stress;
623  // check penetration of node to element and calculation of contact forces
624  bool get_if_node_penetrates_element (Ptr<ICFEXPElementNodeBase> node, t_fexpcommon_ct & distance_out, t_fexpcommon_ct & xsi1, t_fexpcommon_ct & xsi2, t_fexpcommon_ct & xsi3);
625  t_fexpcommon_ct calculate_contact_force_from_pentration(Ptr<ICFEXPElementNodeBase> node, t_fexpcommon_ct distance, t_fexpcommon_ct xsi1, t_fexpcommon_ct xsi2, t_fexpcommon_ct xsi3);
626  void calculate_natural_coordinates (t_fexpcommon_ct x, t_fexpcommon_ct y, t_fexpcommon_ct & xsi1_out, t_fexpcommon_ct & xsi2_out, t_fexpcommon_ct & xsi3_out);
627  // integrated internal forces (force, moment)
628  std::map<size_t, Ptr<CFEXPMatrix2D>> _f_int;
629  // contact forces
630  std::map<size_t, Ptr<CFEXPMatrix2D>> _f_cnt;
631  // result map id
632  std::map<std::string, std::function<std::string()>> _result_map_gttr;
633 };
634 
641 
644 {
647 };
648 
649 // structure of input file
650 #define FINITE_ELEMENT_BLOCK FINITE_ELEMENT_SRUCT
651 // string key for input model data for each block of file structure
652 #define FINITE_ELEMENT_KEY_KEY(cls) STRUCT_KEYS(FINITE_ELEMENT_BLOCK, CLS_KEY(cls))
653 // input model data for each block of file structure
654 #define FINITE_ELEMENT_CLS(cls, basecls) CLS_MAP_PAIR(FINITE_ELEMENT_BLOCK, cls, basecls)
655 
659 {
660 public:
661  using t_FElementMap = std::map<FEXPFEDefinition::EFEXPFiniteElementType, std::function<Ptr<ICFEXPElementBase>()>>;
663 
665 protected:
666  // [no protected members] -----------------------------
667 private:
668  // [no private members ] -----------------------------
669 };
670 
671 #endif // !_CFEXPELEMENT_H_
virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t idx) override
Definition: FEXPElement.cpp:343
std::map< FEXPFEDefinition::EFEXPFiniteElementType, std::function< Ptr< ICFEXPElementBase >()> > t_FElementMap
Definition: FEXPElement.h:661
static const FEXPFEDefinition::EFEXPFiniteElementGeom G_TYPE
Definition: FEXPElement.h:575
virtual t_fexpcommon_ct GetDisplacement(FEXPFEGeom::EFEXPFECoordinates dir) override
Definition: FEXPElement.cpp:511
virtual void SetForce(EFEXPElementForce force, size_t node_id, size_t idx, t_fexpcommon_ct value) override
Definition: FEXPElementShell.cpp:1061
virtual void SetForcesToDefault() override
Definition: FEXPElement.cpp:309
virtual void CalculateTransformation()=0
Ptr< CFEXGeomTools::t_BoundBox > GetBoundingBoxBounds()
Definition: FEXPElement.cpp:713
Base interface for nodal load.
Definition: FEXPElement.h:151
size_t _model_id
Definition: FEXPElement.h:290
Definition: FEXPElement.h:19
C^0 T. Belytschko 3-noded (one quadrature node) triangular shell FE.
Definition: FEXPElement.h:537
virtual void SetThreadId(size_t id) override
Definition: FEXPElement.h:192
Definition: FEXPElement.h:155
Base interface for nodal constrains.
Definition: FEXPElement.h:89
t_fexpcommon_ct _x
Definition: FEXPElement.h:64
virtual Ptr< std::map< std::string, std::string > > GetResult() override
Definition: FEXPElementShell.cpp:609
bool GetIsSimulationEnd()
Definition: FEXPElement.h:286
virtual Ptr< t_SerializedData > NetSerialize() override
Definition: FEXPElement.h:135
t_fexpcommon_ct GetCurrentTime()
Definition: FEXPElement.h:287
virtual void CalcNewPosition(t_fexpcommon_ct dt, t_fexpcommon_ct dt_old)=0
virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t node_id, size_t idx)=0
Definition: FEXPElement.h:93
Definition: FEXPElement.h:310
ICFEXPElementNodeConstrain(size_t id)
Definition: FEXPElement.h:95
virtual t_fexpcommon_ct GetPentratingContactForce(size_t idx) override
Definition: FEXPElement.cpp:353
virtual void ApplyConstrain(EConstrType type, Ptr< CFEXPMatrix2D > &vect, t_fexpcommon_ct time)=0
virtual void SetForcesToDefault() override
Definition: FEXPElementShell.cpp:155
t_fexpcommon_ct _t_current
Definition: FEXPElement.h:293
size_t GetLoadId()
Definition: FEXPElement.h:160
virtual void CalcStress(t_fexpcommon_ct dt) override
Definition: FEXPElementShell.cpp:576
bool _print_result
Definition: FEXPElement.h:295
ELoadType
Definition: FEXPElement.h:155
CFEXPElementShellTriag()
Definition: FEXPElementShell.cpp:20
size_t GetTimeStepCounter()
Definition: FEXPElement.h:284
virtual t_fexpcommon_ct GetOriginalCoordinate(size_t idx) override
Definition: FEXPElement.cpp:336
virtual void SetThreadId(size_t id) override
Definition: FEXPElement.h:130
size_t _state_x
Definition: FEXPElement.h:67
virtual size_t GetId() override
Definition: FEXPElement.h:187
Ptr< CFEXPMatrix2D > & GetAccel()
Definition: FEXPElement.h:488
void set_value(FEXPFEGeom::EFEXPFECoordinates dir, size_t state, t_fexpcommon_ct value)
Definition: FEXPElement.cpp:96
virtual size_t GetModelId() override
Definition: FEXPElement.h:126
virtual size_t GetThreadId() override
Definition: FEXPElement.h:128
virtual void InitConstrain(Ptr< ICFEXPElementNodeConstrain > &constrain_v, Ptr< ICFEXPElementNodeConstrain > &constrain_a) override
Definition: FEXPElement.cpp:318
virtual Ptr< t_SerializedData > NetSerialize() override
Definition: FEXPElement.h:197
virtual Ptr< CFEXPMatrix2D > GetInrt()
Definition: FEXPElement.h:269
void AddConstrainData(FEXPFEGeom::EFEXPFECoordinates dir, EConstrType type, EConstrStat state, t_fexpcommon_ct time, t_fexpcommon_ct cstr)
Definition: FEXPElement.h:99
virtual void SetForce(EFEXPElementForce force, size_t node_id, size_t idx, t_fexpcommon_ct value)=0
void AddLoadData(FEXPFEGeom::EFEXPFECoordinates dir, ELoadType type, ELoadStat state, t_fexpcommon_ct time, t_fexpcommon_ct cstr)
Definition: FEXPElement.h:161
void get_value(FEXPFEGeom::EFEXPFECoordinates dir, size_t &state, t_fexpcommon_ct &value)
Definition: FEXPElement.cpp:108
virtual void ApplyConstrain(EConstrType type, Ptr< CFEXPMatrix2D > &vect, t_fexpcommon_ct time) override
Definition: FEXPElement.cpp:130
virtual size_t GetType() override
Definition: FEXPElement.h:189
virtual Ptr< t_SerializedData > NetSerialize() override
Definition: FEXPElementShell.cpp:621
ICFEXPElementBase(FEXPFEDefinition::EFEXPFiniteElementGeom egeom)
Definition: FEXPElement.cpp:694
size_t GetConstrainId()
Definition: FEXPElement.h:98
virtual void CalcIntForce() override
Definition: FEXPElementShell.cpp:180
#define FEXPCOMMON_STACAST(clsfrom, clsto, variable)
Definition: FEXPCommon.h:137
t_fexpcommon_ct _y
Definition: FEXPElement.h:65
virtual ~CFEXPElementNodeTableDataBase()
Definition: FEXPElement.h:57
size_t _state_y
Definition: FEXPElement.h:68
EFEXPNodeResult
The type of result data.
Definition: FEXPElement.h:22
static const FEXPFEDefinition::EFEXPFiniteElementType ID
Definition: FEXPElement.h:574
size_t GetElementId() const
Definition: FEXPElement.h:395
Definition: FEXPCommon.h:108
virtual Ptr< std::map< std::string, std::string > > GetResult()=0
CFEXPElementNodeGeneral(size_t id, size_t model_id, t_fexpcommon_ct x, t_fexpcommon_ct y, t_fexpcommon_ct z, Ptr< CFEXPBaseSetting > setting)
Definition: FEXPElement.cpp:258
virtual void SetMass(t_fexpcommon_ct mass)
Definition: FEXPElement.h:267
CFEXPElementNodeConstrain(size_t id)
Definition: FEXPElement.cpp:125
EConstrStat
Definition: FEXPElement.h:94
Finite element node coordinates.
Definition: FEXPGeom.h:78
bool get_table_data(FEXPFEGeom::EFEXPFECoordinates dir, size_t type, t_fexpcommon_ct time, size_t &state, t_fexpcommon_ct &value)
Definition: FEXPElement.cpp:44
virtual size_t GetType() override
Definition: FEXPElement.h:257
Definition: FEXPElement.h:346
Definition: FEXPDataContainer.h:25
virtual void SetForcesToDefault()=0
virtual void NetDeserialize(Ptr< t_SerializedData > data) override
Definition: FEXPElement.cpp:616
void apply_acc_load(Ptr< CFEXPMatrix2D > &acc)
Definition: FEXPElement.cpp:559
FEXPFEDefinition::EFEXPFiniteElementGeom GetElementGeom()
Definition: FEXPElement.h:393
virtual t_fexpcommon_ct GetCriticalDt()=0
virtual Ptr< std::map< std::string, std::string > > GetResult()=0
virtual void CalculateTransformation() override
Definition: FEXPElementShell.cpp:595
Ptr< CFEXPMatrix2D > & GetVeloc()
Definition: FEXPElement.h:486
virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t node_id, size_t idx) override
Definition: FEXPElementShell.cpp:1073
CFEXPElementNodeTableDataBase()
Definition: FEXPElement.h:56
virtual size_t GetId() override
Definition: FEXPElement.h:387
static const t_FElementMap FINITE_ELEMENT_CLS_MAP
Definition: FEXPElement.h:662
virtual size_t GetThreadId() override
Definition: FEXPElement.h:190
Definition: FEXPCommon.h:276
double t_fexpcommon_ct
Definition: FEXPCommon.h:120
Definition: FEXPCommon.h:110
size_t _fe_model_id
Definition: FEXPElement.h:411
Definition: FEXPElement.h:94
ICFEXPElementNodeLoad(size_t id)
Definition: FEXPElement.h:157
size_t _fe_nd_count
Definition: FEXPElement.h:413
std::vector< std::weak_ptr< ICFEXPElementNodeBase > > _node_coord
Definition: FEXPElement.h:419
Base interface for FE nodes.
Definition: FEXPElement.h:245
virtual size_t GetType() override
Definition: FEXPElement.h:127
virtual t_fexpcommon_ct GetMass()
Definition: FEXPElement.h:268
virtual void SetPentratingContactForce(size_t idx, t_fexpcommon_ct force)=0
EFEXPElementForce
The type of computed forces (external forces are considered similarly as constrains) ...
Definition: FEXPElement.h:19
virtual size_t GetThreadNumber() override
Definition: FEXPElement.h:544
table_row_values()
Definition: FEXPElement.h:70
Definition: FEXPElement.h:93
Definition: FEXPElement.h:155
Definition: FEXPElement.h:22
virtual void ApplyLoad(ELoadType type, Ptr< CFEXPMatrix2D > &vect, t_fexpcommon_ct time)
Definition: FEXPElement.cpp:178
virtual ~ICFEXPGeomAction()
Definition: FEXPElement.h:35
ELoadStat
Definition: FEXPElement.h:156
virtual void SetPentratingContactForce(size_t idx, t_fexpcommon_ct force) override
Definition: FEXPElement.cpp:360
virtual ~ICFEXPElementBase()
Definition: FEXPElement.h:384
bool GetIsTimeToSaveRes()
Definition: FEXPElement.h:285
const FEXPFEDefinition::EFEXPFiniteElementType FINITE_ELEMENT_SRUCT[FEXPFEDefinition::EFEXPFiniteElementType::eFeCount]
Types of implemented FEs.
Definition: FEXPElement.h:643
virtual size_t GetTimeStepCounter() override
Definition: FEXPElementShell.cpp:1105
virtual Ptr< t_SerializedData > NetSerialize() override
Definition: FEXPElement.cpp:569
Definition: FEXPDataContainer.h:25
size_t _thread_id
Definition: FEXPElement.h:289
#define FEXPCOMMON_NOT_IMPLEMENTED_EX
Definition: FEXPCommon.h:144
virtual size_t GetId() override
Definition: FEXPElement.h:255
virtual void CalcNewPosition(t_fexpcommon_ct dt, t_fexpcommon_ct dt_old) override
Definition: FEXPElement.cpp:367
virtual t_fexpcommon_ct GetForce(EFEXPElementForce force, size_t idx)=0
virtual void NetDeserialize(Ptr< t_SerializedData > data) override
Definition: FEXPElementShell.cpp:658
Ptr< std::vector< std::weak_ptr< ICFEXPElementBase > > > GetAssocElements()
Definition: FEXPElement.cpp:244
virtual size_t GetModelId() override
Definition: FEXPElement.h:388
Definition: FEXPElement.h:22
virtual void SetThreadId(size_t id) override
Definition: FEXPElement.h:391
virtual size_t GetThreadNumber() override
Definition: FEXPElement.h:129
virtual size_t GetModelId() override
Definition: FEXPElement.h:256
virtual ~CFEXPElementNodeLoad()
Definition: FEXPElement.h:185
Definition: FEXPElement.h:156
static Ptr< ICFEXPElementBase > GetFiniteElement(FEXPFEDefinition::EFEXPFiniteElementType el_type)
Definition: FEXPElement.cpp:678
virtual void NetDeserialize(Ptr< t_SerializedData > data) override
Definition: FEXPElement.h:136
Definition: FEXPElement.h:93
virtual Ptr< std::map< std::string, std::string > > GetResult() override
Definition: FEXPElement.cpp:499
t_fexpcommon_ct _z
Definition: FEXPElement.h:66
Definition: FEXPElement.h:213
virtual size_t GetThreadId() override
Definition: FEXPElement.h:390
Definition: FEXPElement.h:19
virtual void Init(size_t id, size_t model_id, std::vector< Ptr< ICFEXPElementNodeBase >> &nodes, Ptr< ICFEXPMaterialBase > material, Ptr< CFEXPBaseSetting > setting) override
Definition: FEXPElementShell.cpp:26
Interface for main computational actions in terms of the model geometry.
Definition: FEXPElement.h:32
EFEXPFiniteElementType
Type of FE.
Definition: FEXPCommon.h:106
Definition: FEXPCommon.h:113
t_fexpcommon_ct _t_end
Definition: FEXPElement.h:294
Base class for 2D FE.
Definition: FEXPElement.h:377
virtual size_t GetNodeId()
Definition: FEXPGeom.h:226
virtual void ApplyLoad(ELoadType type, Ptr< CFEXPMatrix2D > &vect, t_fexpcommon_ct time)=0
virtual t_fexpcommon_ct GetOriginalCoordinate(size_t idx)=0
Chart definition.
Definition: FEXPElement.h:53
void apply_acc_constrains(Ptr< CFEXPMatrix2D > &acc)
Definition: FEXPElement.cpp:520
Definition: FEXPElement.h:94
Definition: FEXPDataContainer.h:25
virtual ~CFEXPElementNodeGeneral()
Definition: FEXPElement.h:454
Definition: FEXPDataContainer.h:25
virtual size_t GetTimeStepCounter()=0
virtual void NetDeserialize(Ptr< t_SerializedData > data) override
Definition: FEXPElement.h:198
EFEXPFiniteElementGeom
Type of FE geometry.
Definition: FEXPCommon.h:90
virtual ~ICFEXPElementNodeBase()
Definition: FEXPElement.h:252
size_t GetNodeCount() const
Definition: FEXPElement.h:396
virtual size_t GetModelId() override
Definition: FEXPElement.h:188
virtual ~CFEXPElementShellTriag()
Definition: FEXPElement.h:542
Definition: FEXPElement.h:22
virtual ~ICFEXPElementNodeLoad()
Definition: FEXPElement.h:158
CFEXPElementNodeLoad(size_t id)
Definition: FEXPElement.cpp:173
ICFEXPElementNodeBase(size_t id, size_t model_id, t_fexpcommon_ct x, t_fexpcommon_ct y, t_fexpcommon_ct z)
Definition: FEXPElement.cpp:222
Ptr< CFEX3DPlane< t_fexpcommon_ct > > get_element_plane(Ptr< ICFEXPElementNodeBase > nd1, Ptr< ICFEXPElementNodeBase > nd2, Ptr< ICFEXPElementNodeBase > nd3)
Definition: FEXPElement.cpp:701
void apply_vel_constrains(Ptr< CFEXPMatrix2D > &vel)
Definition: FEXPElement.cpp:539
Base interface for system element.
Definition: FEXPDataContainer.h:28
Definition: FEXPElement.h:22
#define FEXPCOMMON_DEFAULT_VALUE
Definition: FEXPCommon.h:179
t_fexpcommon_ct _time
Definition: FEXPElement.h:63
void SetAssocElement(Ptr< ICFEXPElementBase > &elem)
Definition: FEXPElement.cpp:235
size_t _state_z
Definition: FEXPElement.h:69
virtual size_t GetThreadNumber() override
Definition: FEXPElement.h:456
General shell FE node.
Definition: FEXPElement.h:448
size_t _t_counter
Definition: FEXPElement.h:292
static std::enable_if< std::is_base_of< ICFEXPElementNodeBase, TFeNode >::value, Ptr< TFeNode > >::type get_specific_fe_node(Ptr< ICFEXPElementNodeBase > base)
Definition: FEXPElement.h:434
virtual ~ICFEXPElementNodeConstrain()
Definition: FEXPElement.h:96
virtual void InitLoad(Ptr< ICFEXPElementNodeLoad > &load) override
Definition: FEXPElement.cpp:327
virtual size_t GetThreadId() override
Definition: FEXPElement.h:258
Nodal load.
Definition: FEXPElement.h:180
Factory for FEs. It creates FE based on the settings comming from an input data files.
Definition: FEXPElement.h:658
void add_table_data(FEXPFEGeom::EFEXPFECoordinates dir, size_t type, size_t state, t_fexpcommon_ct time, t_fexpcommon_ct value)
Definition: FEXPElement.cpp:10
Definition: FEXPElement.h:93
virtual size_t GetId() override
Definition: FEXPElement.h:125
virtual t_fexpcommon_ct GetDisplacement(FEXPFEGeom::EFEXPFECoordinates dir)=0
virtual t_fexpcommon_ct GetPentratingContactForce(size_t idx)=0
Definition: FEXPElement.h:156
Definition: FEXPElement.h:155
std::vector< std::weak_ptr< ICFEXPElementNodeBase > > & GetNodes()
Definition: FEXPElement.h:397
std::map< size_t, Ptr< std::vector< Ptr< table_row_values > > > > _table
Definition: FEXPElement.h:76
virtual void SetThreadId(size_t id) override
Definition: FEXPElement.h:259
size_t _fe_id
Definition: FEXPElement.h:412
virtual ~CFEXPElementNodeConstrain()
Definition: FEXPElement.h:123
virtual void CalcConForce(std::vector< Ptr< ICFEXPElementNodeBase >> &found_nodes) override
Definition: FEXPElementShell.cpp:399
virtual t_fexpcommon_ct GetCriticalDt() override
Definition: FEXPElementShell.cpp:1085
void apply_frc_load(Ptr< CFEXPMatrix2D > &frc)
Definition: FEXPElement.cpp:549
virtual size_t GetType() override
Definition: FEXPElement.h:389
EConstrType
Definition: FEXPElement.h:93
Nodal constrains.
Definition: FEXPElement.h:118
Definition: FEXPElement.h:155
virtual size_t GetThreadNumber() override
Definition: FEXPElement.h:191
EFEXPFECoordinates
Type of individual coordinate.
Definition: FEXPGeom.h:19